package com.ddw.meedeeuh.shared.movie;

import java.util.regex.Pattern;

/**
 * Represents the global movie settings
 * @author cmcnicholas
 *
 */
public interface MovieSettings {

	public abstract static class MovieNfoAdapter<T> {

		public T MOVIE;
		public T TITLE;
		public T ORIGINAL_TITLE;
		public T SORT_TITLE;
		public T RATING;
		public T YEAR;
		public T TOP250;
		public T VOTES;
		public T OUTLINE;
		public T PLOT;
		public T TAGLINE;
		public T RUNTIME;
		public T THUMB;
		public T MPAA;
		public T PLAY_COUNT;
		public T WATCHED;
		public T ID;
		public T TRAILER;
		public T GENRE;
		public T CREDITS;
		public T DIRECTOR;
		public T ACTOR;
		public T ACTOR_NAME;
		public T ACTOR_ROLE;
		public T SET;
		public T FILE_INFO;
		public T STREAM_DETAILS;
		public T STREAM_DETAILS_VIDEO;
		public T STREAM_DETAILS_VIDEO_CODEC;
		public T STREAM_DETAILS_VIDEO_ASPECT;
		public T STREAM_DETAILS_VIDEO_WIDTH;
		public T STREAM_DETAILS_VIDEO_HEIGHT;
		public T STREAM_DETAILS_AUDIO;
		public T STREAM_DETAILS_AUDIO_CODEC;
		public T STREAM_DETAILS_AUDIO_LANGUAGE;
		public T STREAM_DETAILS_AUDIO_CHANNELS;
		public T STREAM_DETAILS_SUBTITLE;
		public T STREAM_DETAILS_SUBTITLE_LANGUAGE;

		public MovieNfoAdapter(T defaultValue) {
			MOVIE = TITLE = ORIGINAL_TITLE = SORT_TITLE = RATING =
				YEAR = TOP250 = VOTES = OUTLINE = PLOT = TAGLINE =
				RUNTIME = THUMB = MPAA = PLAY_COUNT = WATCHED = ID =
				TRAILER = GENRE = CREDITS = DIRECTOR = ACTOR =
				ACTOR_NAME = ACTOR_ROLE = SET = FILE_INFO =
				STREAM_DETAILS = STREAM_DETAILS_VIDEO =
				STREAM_DETAILS_VIDEO_CODEC =
				STREAM_DETAILS_VIDEO_ASPECT =
				STREAM_DETAILS_VIDEO_WIDTH =
				STREAM_DETAILS_VIDEO_HEIGHT =
				STREAM_DETAILS_AUDIO =
				STREAM_DETAILS_AUDIO_CODEC =
				STREAM_DETAILS_AUDIO_LANGUAGE =
				STREAM_DETAILS_AUDIO_CHANNELS =
				STREAM_DETAILS_SUBTITLE =
				STREAM_DETAILS_SUBTITLE_LANGUAGE = defaultValue;
		}

	}

	public static class MovieNfoConstants extends MovieNfoAdapter<String> {

		MovieNfoConstants() {
			super(null);
		}

	}

	public static class MovieExportNodes extends MovieNfoAdapter<Boolean> {

		MovieExportNodes() {
			super(true);
		}

	}

	public MovieNfoConstants getNfoConstants();

	public MovieExportNodes getExportNodes();

	public String getLibraryPath();

	public Pattern getNameRegex();

	public Pattern getYearRegex();

	public boolean matchNameOnParentFolder();

	public boolean matchYearOnParentFolder();

	public boolean parentFolderNameMustMatchMovie();

	public boolean matchNameOnNfo();

	public String getTmdbApiKey();

	public String[] getMovieExtensions();

	public String[] getIgnoreStrings();

	public boolean usePosters();

	public boolean useFanart();

	public boolean useExtraThumbs();

	public String getPosterName();

	public String getFanartName();

	public String getExtraThumbsFolderName();

	public Pattern getExtraThumbsPattern();

	public String getExtraThumbsFormat();

	/**
	 * Gets whether to format nfo's so that they look pretty
	 * @return a flag indicating formatting
	 */
	public boolean getPrettyFormatNfo();

	/**
	 * Sets whether to format nfo's so that they look pretty
	 * @param prettyFormat a flag indicating formatting
	 */
	public void setPrettyFormatNfo(boolean prettyFormat);

	public boolean getAddEmptyNfoNodes();

	public void setAddEmptyNfoNodes(boolean addEmptyNfoNodes);

}
